package com.warningrc.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Stack;
import java.util.Vector;

/**
 * 操作 {@code java.util.List} 的一些静态方法
 * @author <a href="http://weibo.com/weibowarning">王宁</a><br/>
 * email: <a href="mailto:childe.wangning@gmail.com">childe.wangning@gmail.com</a>
 * @date  2012-3-12
 */
public final class Lists {
	private Lists() {
	}

	/**
	 * 创建一个可变的，空的 {@code ArrayList} 对象.
	 * 
	 * @return 一个可变的，空的 {@code ArrayList} 对象
	 */
	public static <T> ArrayList<T> newArrayList() {
		return new ArrayList<T>();
	}

	/**
	 * 创建一个可变的，空的 {@code LinkedList} 对象.
	 * 
	 * @return 一个可变的，空的 {@code LinkedList} 对象
	 */
	public static <T> LinkedList<T> newLinkedList() {
		return new LinkedList<T>();
	}

	/**
	 * 创建一个可变的，空的 {@code Stack} 对象.
	 * 
	 * @return 一个可变的，空的 {@code Stack} 对象
	 */
	public static <T> Stack<T> newStack() {
		return new Stack<T>();
	}

	/**
	 * 创建一个可变的，空的 {@code Vector} 对象.
	 * 
	 * @return 一个可变的，空的 {@code Vector} 对象
	 */
	public static <T> Vector<T> newVector() {
		return new Vector<T>();
	}

	/**
	 * 创建一个包含指定 {@code Collection} 中的元素的可变的 {@code ArrayList} 对象.
	 * 
	 * @return 一个包含指定 {@code Collection} 中的元素的可变的 {@code ArrayList} 对象
	 */
	public static <T> ArrayList<T> newArrayList(Collection<? extends T> c) {
		return new ArrayList<T>(c);
	}

	/**
	 * 创建一个包含指定 {@code Collection} 中的元素的可变的 {@code LinkedList} 对象.
	 * 
	 * @return 一个包含指定 {@code Collection} 中的元素的可变的 {@code LinkedList} 对象
	 */
	public static <T> LinkedList<T> newLinkedList(Collection<? extends T> c) {
		return new LinkedList<T>(c);
	}

	/**
	 * 创建一个包含指定 {@code Collection} 中的元素的可变的 {@code Vector} 对象.
	 * 
	 * @return 一个包含指定 {@code Collection} 中的元素的可变的 {@code Vector} 对象
	 */
	public static <T> Vector<T> newVector(Collection<? extends T> c) {
		return new Vector<T>(c);
	}
}
